package hotel;

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.sql.*;
import java.util.GregorianCalendar;
import java.util.Vector;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

public class AggiungiCliente extends JFrame implements ActionListener {
	private ResultSet rs = null;
	private Vector<String> row;
	private GraficaHotel g;
	private GregorianCalendar gc = new GregorianCalendar();
	private String dataCorrente = gc.get(GregorianCalendar.DAY_OF_MONTH) + "/"
			+ gc.get(GregorianCalendar.MONTH) + "/"
			+ gc.get(GregorianCalendar.YEAR);
	private JTextField nome, cognome, dataDiNascita, comuneDiNascita,
			numeroDocumento, rilasciato, residenza, dataRilascio;
	private JLabel nomeL, cognomeL, dataDiNascitaL, comuneDiNascitaL,
			residenzaL, tipoDocumentoL, numeroDocumentoL, rilasciatoL,
			provinciaL1, provinciaL2, dataRilascioL;
	private JButton aggiungi, scansione;
	private String patternData = "[0-9][0-9][/.-][0-9][0-9][/.-][0-2][0-9][0-9][0-9]";
	private String patternNome = "[a-zA-Z ]*";
	private JPanel p;
	private JFileChooser fc = new JFileChooser();
	private JFileChooser scegliGestione = new JFileChooser();
	private String indirizzo;
	private File file;
	private JComboBox<String> tipoDocumento, provinciaN, provinciaR;
	private String[] tipi = { "C.Identitita", "Patente di Guida", "Passaporto" };
	private String[] province = { "--", "AG", "AL", "AN", "AO", "AR", "AP",
			"AT", "AV", "BA", "BT", "BL", "BN", "BG", "BO", "BZ", "BS", "BR",
			"CA", "CL", "CB", "CI", "CE", "CT", "CZ", "CH", "CO", "CS", "CR",
			"KR", "CN", "EN", "FM", "FE", "FI", "FG", "FC", "FR", "GE", "GO",
			"GR", "IM", "IS", "SP", "AQ", "LT", "LE", "LC", "LI", "LO", "LU",
			"MC", "MN", "MS", "MT", "ME", "MI", "MO", "MB", "NA", "NO", "NU",
			"OT", "OR", "PD", "PA", "PR", "PV", "PG", "PU", "PE", "PC", "PI",
			"PT", "PN", "PZ", "PO", "RG", "RA", "RC", "RE", "RI", "RN", "RM",
			"RO", "SA", "VS", "SS", "SV", "SI", "SR", "SO", "TA", "TE", "TR",
			"TO", "OG", "TP", "TN", "TV", "TS", "UD", "VA", "VE", "VB", "VC",
			"VR", "VV", "VI", "VT" };

	public AggiungiCliente(GraficaHotel g) throws SQLException, IOException {
		this.g = g;
		this.setSize(700, 150);
		this.setTitle("Aggiungi Cliente");
		this.setLocation(350, 250);
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setResizable(false);
		p = new JPanel(new GridLayout(14, 1));
		nomeL = new JLabel("Nome");
		nome = new JTextField(10);
		p.add(nomeL);
		p.add(nome);
		cognomeL = new JLabel("Cognome");
		cognome = new JTextField(10);
		p.add(cognomeL);
		p.add(cognome);
		dataDiNascitaL = new JLabel("Data di Nascita");
		dataDiNascita = new JTextField("gg/mm/aaaa");
		p.add(dataDiNascitaL);
		p.add(dataDiNascita);
		comuneDiNascitaL = new JLabel("Comune di Nascita");
		comuneDiNascita = new JTextField();
		p.add(comuneDiNascitaL);
		p.add(comuneDiNascita);
		provinciaL1 = new JLabel("Provincia");
		provinciaN = new JComboBox(province);
		p.add(provinciaL1);
		p.add(provinciaN);
		residenzaL = new JLabel("Residenza");
		residenza = new JTextField();
		p.add(residenzaL);
		p.add(residenza);
		provinciaL2 = new JLabel("Provincia");
		provinciaR = new JComboBox(province);
		p.add(provinciaL2);
		p.add(provinciaR);
		tipoDocumentoL = new JLabel("Tipo Documento");
		tipoDocumento = new JComboBox(tipi);
		p.add(tipoDocumentoL);
		p.add(tipoDocumento);
		numeroDocumentoL = new JLabel("Numero Documento");
		numeroDocumento = new JTextField();
		p.add(numeroDocumentoL);
		p.add(numeroDocumento);
		rilasciatoL = new JLabel("Rilasciato da");
		rilasciato = new JTextField();
		p.add(rilasciatoL);
		p.add(rilasciato);
		dataRilascioL = new JLabel("Data di rilascio");
		dataRilascio = new JTextField("gg/mm/aaaa");
		p.add(dataRilascioL);
		p.add(dataRilascio);
		scansione = new JButton("Scansione Documento");
		scansione.addActionListener(this);
		p.add(scansione);
		p.add(new JLabel());
		p.add(new JLabel("Arrivo:"));
		p.add(new JLabel(dataCorrente));
		p.add(new JLabel());
		aggiungi = new JButton("Aggiungi Cliente");
		aggiungi.addActionListener(this);
		p.add(aggiungi);
		add(p);
		pack();
		setVisible(true);
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == scansione) {
			fc.setAcceptAllFileFilterUsed(false);
			FileNameExtensionFilter fn = new FileNameExtensionFilter(
					"Tutte le Immagini", "jpg", "gif", "png", "bmp");
			fc.addChoosableFileFilter(fn);
			if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
				file = fc.getSelectedFile();
				indirizzo = file.getAbsolutePath();
			}
		}
		if (e.getSource() == aggiungi) {
			int var = controlla();
			tuttiNeri();
			if (var == 0) {
				String n = nome.getText();
				String c = cognome.getText();
				String d = dataDiNascita.getText();
				String cd = comuneDiNascita.getText();
				String p = (String) provinciaN.getSelectedItem();
				String r = residenza.getText();
				String p1 = (String) provinciaR.getSelectedItem();
				String t = (String) tipoDocumento.getSelectedItem();
				String nd = numeroDocumento.getText();
				String rd = rilasciato.getText();
				String dr = dataRilascio.getText();
				String query = "INSERT INTO CLIENTI"
						+ "(nome,cognome,datadinascita,comunedinascita,"
						+ "provinciadinascita,residenza,provinciadiresidenza,tipodidocumento,numerodidocumento,"
						+ "rilasciatoda,datadirilascio,datadiarrivo,indirizzo) values('"
						+ n
						+ "','"
						+ c
						+ "','"
						+ d
						+ "','"
						+ cd
						+ "','"
						+ p
						+ "','"
						+ r
						+ "','"
						+ p1
						+ "','"
						+ t
						+ "','"
						+ nd
						+ "','"
						+ rd
						+ "','"
						+ dr
						+ "','"
						+ dataCorrente
						+ "','" + indirizzo + "')";
				try {
					if (g.database.query(query)) {
						ImageIcon icona = new ImageIcon("Risorse/v4.png");
						JOptionPane.showMessageDialog(null,
								"Cliente registrato con successo!", "Ottimo",
								JOptionPane.INFORMATION_MESSAGE, icona);
						aggiungiRiga();
					} else
						JOptionPane.showMessageDialog(null,
								"Cliente gia' registrato!", "ERRORE",
								JOptionPane.ERROR_MESSAGE);
					this.dispose();
					g.setFocusableWindowState(true);
					g.setEnabled(true);
					g.setVisible(true);
				} catch (SQLException | IOException e1) {
					System.out.println(e1.getMessage());
				}
			} else {
				if (var == 1)
					nomeL.setForeground(Color.RED);
				else if (var == 2)
					cognomeL.setForeground(Color.RED);
				else if (var == 3)
					dataDiNascitaL.setForeground(Color.RED);
				else if (var == 4)
					comuneDiNascitaL.setForeground(Color.RED);
				else if (var == 5)
					provinciaL1.setForeground(Color.RED);
				else if (var == 6)
					residenzaL.setForeground(Color.RED);
				else if (var == 7)
					provinciaL2.setForeground(Color.RED);
				else if (var == 8)
					numeroDocumentoL.setForeground(Color.RED);
				else if (var == 9)
					dataRilascioL.setForeground(Color.RED);
			}
		}
		// scansione documento?? file chooser
	}

	private int controlla() {
		if (nome.getText().equals("") || !nome.getText().matches(patternNome))
			return 1;
		if (cognome.getText().equals("")
				|| !cognome.getText().matches(patternNome))
			return 2;
		if (dataDiNascita.getText().equals("")
				|| !dataDiNascita.getText().matches(patternData))
			return 3;
		if (comuneDiNascita.getText().equals("")
				|| !comuneDiNascita.getText().matches(patternNome))
			return 4;
		if (((String) provinciaN.getSelectedItem()).equals("--"))
			return 5;
		if (residenza.getText().equals("")
				|| !residenza.getText().matches(patternNome))
			return 6;
		if (((String) provinciaR.getSelectedItem()).equals("--"))
			return 7;
		if (numeroDocumento.getText().contains(" "))
			return 8;
		if (dataRilascio.getText().equals("")
				|| !dataRilascio.getText().matches(patternData))
			return 9;
		return 0;
	}

	private void tuttiNeri() {
		nomeL.setForeground(Color.BLACK);
		cognomeL.setForeground(Color.BLACK);
		residenzaL.setForeground(Color.BLACK);
		numeroDocumentoL.setForeground(Color.BLACK);
		comuneDiNascitaL.setForeground(Color.BLACK);
		provinciaL1.setForeground(Color.BLACK);
		provinciaL2.setForeground(Color.BLACK);
		dataDiNascitaL.setForeground(Color.BLACK);
		dataRilascioL.setForeground(Color.BLACK);
	}

	private void aggiungiRiga() throws SQLException {
		int c = 0;
		int count = g.modelClienti.getRowCount();
		count++;
		rs = g.database.stat.executeQuery("SELECT * FROM CLIENTI");
		ResultSetMetaData md = rs.getMetaData();
		int columnCount = md.getColumnCount();
		row = new Vector<String>(columnCount);
		if (count == 0) {
			for (int i = 2; i <= columnCount; i++) {
				row.add(rs.getString(i));
			}
			g.modelClienti.addRow(row);
		} else {
			while (rs.next()) {
				c++;
				if (count == c) {
					for (int i = 2; i <= columnCount; i++) {
						if (i == 2 || i == 3 || i == 4 || i == 10 || i == 13)
							row.add(rs.getString(i));
					}
					g.modelClienti.addRow(row);
				}
			}
		}

	}
}